export const debounce = (fun: Function, time = 500): any => {
	let timer: ReturnType<typeof setTimeout>;
	return function (...args: any): void {
		clearTimeout(timer);
		timer = setTimeout(() => {
			fun(...args);
		}, time);
	};
};

export const isScrollBottomTrigger = (e: React.UIEvent<HTMLElement>): boolean => {
	e.stopPropagation();
	const { currentTarget } = e;
	const { scrollTop, clientHeight, scrollHeight } = currentTarget;
	const difference = scrollHeight - clientHeight - scrollTop;
	if (difference < 20) {
		return true;
	}
	return false;
};

export const data2Byte = (value: number) => {
	if (Object.prototype.toString.call(value) !== '[object Number]') return '-';

	const _UNIT = ['Byte', 'KB', 'MB', 'GB', 'TB', 'PB'];
	const _CARRY = 1024;
	let index = 0;
	let con = value;
	const isPositive = con >= 0 ? true : false;
	if (!isPositive) {
		con = con * -1;
	}
	while (con >= _CARRY && index < _UNIT.length - 1) {
		con = con / _CARRY;
		index++;
	}
	if (!isPositive) {
		con = con * -1;
	}
	return Number(con.toFixed(2)) + _UNIT[index];
};

export const data2Int = (value: number) => {
	if (Object.prototype.toString.call(value) != '[object Number]') return '-';
	if (value < 0.1 && value > 0) return value.toFixed(4);

	const _UNIT = ['', '万', '亿', '兆', '亿亿'];
	const _CARRY = 10000;
	let index = 0;
	let con = value;
	const isPositive = con >= 0 ? true : false;
	if (!isPositive) {
		con = con * -1;
	}
	while (con >= _CARRY && index < _UNIT.length - 1) {
		con = con / _CARRY;
		index++;
	}
	if (!isPositive) {
		con = con * -1;
	}
	return Number(con.toFixed(2)) + _UNIT[index];
};
